package com.sss.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sss.model.Classroom;
import com.sss.model.Stu;
import com.sss.model.StuVO;
import com.sss.service.StuService;
import com.sss.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;

/**
 * 全世界我最爱朴彩英！
 *
 * @Author sss
 * @Create 2023/12/7 19:06
 * @desc
 */
@RestController
@CrossOrigin
public class CRUDController {

    @Autowired
    private StuService service;

    //通过id查询
    @GetMapping("/id")
    public R findStuById(int id){
        Stu stu = service.findStuById(id);
        return R.ok(stu);
    }

    //通过用户名登录
    @PostMapping("/login")
    public R findStuBySname(@RequestBody Stu stu){
        Stu s = service.findStuBySname(stu.getSname());
        if (s != null){
            return R.ok(stu);
        }else {
            return R.fail();
        }
    }

    /**
     * 使用分页查全部
     * pageNum 当前页码
     * pageSize 页面大小
     * 这两个参数需要前端发请求带过来
     */
    //无条件查询全部
    @GetMapping("/all")
    public R findStuAll(int pageNum,int pageSize){
        // 使用步骤
        // 1 先设置分页信息
        PageHelper.startPage(pageNum,pageSize);
        // 2 正常执行查询
        List<Stu> stu = service.findStuAll();
        // 3 通过查询返回的list创建出分页信息,PageInfo内包含所有分页数据,可以点入源码查看
        PageInfo<Stu> info = new PageInfo<Stu>(stu);
        System.out.println("当前面"+info.getPageNum());
        System.out.println("页面大小"+info.getPageSize() );
        System.out.println("总条数"+info.getTotal() );
        System.out.println("总页数"+info.getPages() );
        System.out.println("数据"+info.getList());
        return R.ok(stu);
    }

    //动态sql,where if
    @GetMapping("/search")
    public R findByMap(@RequestParam HashMap<String,Object> map){
        List<Stu> stu = service.findByMap(map);
        if (stu != null){
            return R.ok(stu);
        }else {
            return R.fail();
        }
    }

    //更新
    @PutMapping("/update")
    public R updateStu(@RequestBody Stu stu){
        int i = service.updateStu(stu);
        if (i>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    //增加
    @PostMapping("/add")
    public R addStu(@RequestBody Stu stu){
        int i = service.addStu(stu);
        if (i>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    //删除
    @DeleteMapping("/delete")
    public R deleteStu(int id){
        int i = service.deleteStu(id);
        if (i>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    //一对一(根据学生表查教室)
    @GetMapping("/class")
    public R findAllStuAndClassroom(){
        List<StuVO> list = service.findAllStuAndClassroom();
        return R.ok(list);
    }

    //一对多(查询一个学生的所有学科信息)
    @GetMapping("/subjects")
    public R findStudentAndAllSubjectByStuid(int sid){
        StuVO stuVO = service.findStudentAndAllSubjectByStuid(sid);
        return R.ok(stuVO);
    }

    //查询教室
    @GetMapping("/classroom")
    public R findClass(){
        List<Classroom> list = service.findClass();
        return R.ok(list);
    }
}
